package Map;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapUsage {

    public static void main(String[] args) {

        /*
        1. HashMap
        特点：基于哈希表实现，无序，线程不安全。
        适用场景：大多数单线程场景。
         */
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("Alice", 25);
        hashMap.put("Bob", 30);
        hashMap.put("Charlie", 40);
        System.out.println("hashMap === "+hashMap);
        System.out.println("get(Object key)：根据键获取对应的值 ==" + hashMap.get("Alice"));
        System.out.println("containsKey(Object key)：判断是否存在指定键 ==" + hashMap.containsKey("Alice"));
        hashMap.remove("Alice");
        System.out.println(" 删除后的containsKey判断结果 ==="+hashMap.containsKey("Alice"));
        System.out.println("containsValue(Object key): 判断是否存在value值"+hashMap.containsValue(25));
        System.out.println("keySet()：返回所有键的集合=="+hashMap.keySet());
        System.out.println("values()：返回所有值的集合=="+hashMap.values());
        /* HashMap 是基于哈希表实现的，允许存储键值对，键和值都可以为 null。*/
        hashMap.put(null, 10);
        System.out.println("hashMap中获取键值为null的数据=="+hashMap.get(null));
        System.out.println("entrySet()：返回所有键值对集合=="+hashMap.entrySet());
        System.out.println("当前Map的大小: " + hashMap.size());  // 输出：1
        System.out.println("Map是否为空: " + hashMap.isEmpty());  // 输出：false
        /* ===HashMap的遍历=== */
        System.out.println("for循环遍历 ==》");
        for (Map.Entry<String, Integer> entry : hashMap.entrySet()){
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        System.out.println("forEach遍历 ==》");
        hashMap.forEach((key,value)->System.out.println("Key: " + key + ", Value: " + value));


        System.out.println("\n\n\n===========================================");
        System.out.println("===========================================");
        System.out.println("===========================================");
//        /*
//        2. LinkedHashMap特点：保留插入顺序或访问顺序，线程不安全。
//        适用场景：需要按插入顺序遍历或实现 LRU 缓存。
//        */
//        Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
//        linkedHashMap.put("Alice", 25);
//        linkedHashMap.put("Bob", 30);
//        System.out.println("linkedHashMap === "+linkedHashMap);
//        System.out.println("\n\n\n===========================================");
//        System.out.println("===========================================");
//        System.out.println("===========================================");
//
//        /*
//        特点：基于红黑树实现，按键值自然顺序排序。
//        适用场景：需要有序存储键值对。
//        */
//        Map<String, Integer> treeMap = new TreeMap<>();
//        treeMap.put("Charlie", 40);
//        treeMap.put("Alice", 25);
//        System.out.println("treeMap === "+treeMap);


    }


}
